package br.com.gustavobhz.portalcolaborador.services;

import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.Request;
import org.apache.tapestry5.services.Session;

import br.com.gustavobhz.portalcolaborador.dao.CrudServiceDAO;
import br.com.gustavobhz.portalcolaborador.dao.QueryParameters;
import br.com.gustavobhz.portalcolaborador.entidade.Usuario;
import br.com.gustavobhz.portalcolaborador.seguranca.AutenticadorException;

public class AutenticadorBasico implements Autenticador {
	
    public static final String AUTH_TOKEN = "authToken";

    @Inject
    private Request request;
    
    @Inject
    private CrudServiceDAO crudService;
    
    public void login(String nome, String senha) throws AutenticadorException {
    
        Usuario usuario = crudService.findUniqueWithNamedQuery(Usuario.POR_CREDENCIAIS, QueryParameters.with(
                "nome",
                nome).and("senha", senha).parameters());
        
        if(usuario == null) { throw new AutenticadorException("Usuário não encontrado. Tente novamente"); }
        
        request.getSession(true).setAttribute(AUTH_TOKEN, usuario);
    }

	public Usuario getUsuarioLogado() {
		Usuario usuario = null;
		if(isLogado()) {
			usuario = (Usuario) request.getSession(true).getAttribute(AUTH_TOKEN);
		} else {
			throw new IllegalStateException("O usuário não está logado! ");
		}
		return usuario;
	}

	public boolean isLogado() {
        Session session = request.getSession(false);
        if (session != null) { return session.getAttribute(AUTH_TOKEN) != null; }
        return false;
	}

	public void logout() {
        Session session = request.getSession(false);
        if (session != null)
        {
            session.setAttribute(AUTH_TOKEN, null);
            session.invalidate();
        }		
	}
    
}